package org.nutz.aop;

/**
 * 类定义的代理
 * 
 * @author zozoh(zozohtnt@gmail.com)
 */
public interface ClassAgent {

	/**
	 * 定义一个新的类对象
	 * 
	 * @param cd
	 *            字节码生成器
	 * @param klass
	 *            参照类对象
	 * @return 新的类对象
	 */
	<T> Class<T> define(ClassDefiner cd, Class<T> klass);

	/**
	 * 添加拦截器
	 * 
	 * @param matcher
	 *            方法匹配器
	 * @param inte
	 *            拦截器
	 * @return 添加完成后的ClassAgent
	 */
	ClassAgent addInterceptor(MethodMatcher matcher, MethodInterceptor inte);

	String CLASSNAME_SUFFIX = "$$NUTZAOP";
}
